#C 语言标准库头文件 setjmp.h
这个头文件提供 非局部跳转 的相关功能,例如遇到错误时进行跳出。
#include <stdio.h>
#include <setjmp.h>
#include <stdlib.h>
jmp_buf jump_buffer;
void function_with_error(int condition) {
printf("进入可能出错的函数\n");
if (condition) {
printf("检测到错误条件,准备跳转\n");
longjmp(jump_buffer, 1);
}
printf("正常执行完毕\n");
}
int main(void) {
int ret = setjmp(jump_buffer);
if (ret == 0) {
printf("第一次调用setjmp,准备调用可能出错的函数\n");
function_with_error(0);
function_with_error(1);
} else {
printf("从longjmp返回,错误码: %d\n", ret);
printf("执行错误处理流程...\n");
}
printf("程序继续执行...\n");
if (setjmp(jump_buffer)) {
printf("捕获到异常\n");
} else {
printf("尝试执行可能抛出异常的代码\n");
longjmp(jump_buffer, 42);
}
return 0;
}
运行结果:
第一次调用setjmp,准备调用可能出错的函数
进入可能出错的函数
正常执行完毕
进入可能出错的函数
检测到错误条件,准备跳转
从longjmp返回,错误码: 1
执行错误处理流程...
程序继续执行...
尝试执行可能抛出异常的代码
捕获到异常
类型 | 标准 | 说明 |
---|
jmp_buf | C89 | 用于跳转的执行上下文 |
宏 | 标准 | 说明 |
---|
setjmp | C89 | 保存用于跳转的执行上下文 |
宏 | 标准 | 说明 |
---|
longjmp | C89 | 跳转到指定的执行上下文,跳转后无法返回 |
#推荐阅读